{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GADTSyntax #-}

module Language.Skirth.SKI where

data SKI a where
  S :: SKI a
  K :: SKI a
  I :: SKI a
  W :: {-# UNPACK #-} !Word -> SKI a
  A :: SKI a -> SKI a -> SKI a
  V :: a -> SKI a
  deriving stock (Functor)
